package com.joker.demo.admin.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joker.demo.admin.domain.po.ThreadPoolMonitorPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 线程池监控数据Mapper
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:00
 */
@Mapper
public interface ThreadPoolMonitorMapper extends BaseMapper<ThreadPoolMonitorPO> {

    /**
     * 查询指定时间范围内的监控数据
     *
     * @param registerKey 执行器标识
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param limit       限制数量
     * @return 监控数据列表
     */
    List<ThreadPoolMonitorPO> queryMonitorData(@Param("registerKey") String registerKey,
                                               @Param("startTime") LocalDateTime startTime,
                                               @Param("endTime") LocalDateTime endTime,
                                               @Param("limit") Integer limit);

    /**
     * 查询最新的监控数据
     *
     * @param registerKey 执行器标识
     * @param limit       限制数量
     * @return 监控数据列表
     */
    List<ThreadPoolMonitorPO> queryLatestMonitorData(@Param("registerKey") String registerKey,
                                                     @Param("limit") Integer limit);

    /**
     * 查询所有执行器的最新监控数据
     *
     * @return 监控数据列表
     */
    List<ThreadPoolMonitorPO> queryAllLatestMonitorData();

    /**
     * 统计指定时间范围内的监控数据
     *
     * @param registerKey 执行器标识
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return 统计结果
     */
    ThreadPoolMonitorPO queryMonitorStatistics(@Param("registerKey") String registerKey,
                                               @Param("startTime") LocalDateTime startTime,
                                               @Param("endTime") LocalDateTime endTime);

    /**
     * 查询24小时内所有执行器的汇总监控数据
     *
     * @param startTime 开始时间（24小时前）
     * @return 汇总监控数据列表
     */
    List<ThreadPoolMonitorPO> query24HourSummaryData(@Param("startTime") LocalDateTime startTime);

    /**
     * 查询指定执行器24小时内的汇总监控数据
     *
     * @param registerKey 执行器标识
     * @param startTime 开始时间（24小时前）
     * @return 汇总监控数据
     */
    ThreadPoolMonitorPO query24HourSummaryDataByRegisterKey(@Param("registerKey") String registerKey,
                                                           @Param("startTime") LocalDateTime startTime);
}
